package com.ruoyi.system.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.system.entity.AbdulBaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 桌台计费规则对象 table_billing_rules
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@ApiModel("桌台计费规则对象")
public class TableBillingRules extends AbdulBaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 桌台计费规则表的唯一标识符，自动递增 */
    @ApiModelProperty("主键ID")
    private Long id;

    /** 计费类型，例如：按时计费、按次计费等 */
    @ApiModelProperty("计费类型")
    @Excel(name = "计费类型，例如：按时计费、按次计费等")
    private String billingType;

    /** 计费方式名称，用于描述具体的计费方式 */
    @ApiModelProperty("计费方式名称")
    @Excel(name = "计费方式名称，用于描述具体的计费方式")
    private String billingMethodName;

    /** 编号，用于唯一标识计费方式 */
    @ApiModelProperty("编号")
    @Excel(name = "编号，用于唯一标识计费方式")
    private String code;

    /** 计费方式，详细描述计费的具体规则，如每小时费用等 */
    @ApiModelProperty("计费方式")
    @Excel(name = "计费方式，详细描述计费的具体规则，如每小时费用等")
    private String billingMethod;

    /** 活动，关联的活动名称或描述 */
    @ApiModelProperty("活动，关联的活动名称或描述")
    @Excel(name = "活动，关联的活动名称或描述")
    private String activity;

    /** 排序，用于确定计费规则在列表中的显示顺序 */
    @ApiModelProperty("排序")
    @Excel(name = "排序，用于确定计费规则在列表中的显示顺序")
    private Long sortOrder;

    /** 状态，表示计费规则是否有效 */
    @ApiModelProperty("状态")
    @Excel(name = "状态，表示计费规则是否有效")
    private String status;

    /** 开单后 表示是否在开单后应用此计费规则 */
    @ApiModelProperty("开单后")
    @Excel(name = "开单后 表示是否在开单后应用此计费规则")
    private Integer afterOpening;

    /** 每小时，每小时的费用 */
    @ApiModelProperty("每小时，每小时的费用")
    @Excel(name = "每小时，每小时的费用")
    private BigDecimal perHour;

    /** 超出1小时的计费方式，描述超出1小时后的计费规则 */
    @ApiModelProperty("超出1小时的计费方式")
    @Excel(name = "超出1小时的计费方式，描述超出1小时后的计费规则")
    private String overOneHourBillingMethod;

    /** 按包段计费(是/否) */
    @ApiModelProperty("按包段计费(是/否)")
    @Excel(name = "按包段计费(是/否)")
    private Integer segmentBilling;

    /** 包段计费详情(如"3小时200元") */
    @ApiModelProperty("包段计费详情")
    @Excel(name = "包段计费详情")
    private String segmentBillingDetails;

    /** 超出4小时的计费方式 */
    @ApiModelProperty("超出4小时的计费方式")
    @Excel(name = "超出4小时的计费方式")
    private String overFourHoursMethod;

    /** 按包场计费(是/否) */
    @ApiModelProperty("按包场计费(是/否)")
    @Excel(name = "按包场计费(是/否)")
    private Integer venueBilling;

    /** 包场计费详情(如"全天500元") */
    @ApiModelProperty("包场计费详情")
    @Excel(name = "包场计费详情")
    private String venueBillingDetails;

    /** 跨场的计费方式 */
    @ApiModelProperty("跨场的计费方式")
    @Excel(name = "跨场的计费方式")
    private String crossVenueMethod;

    /** 分时段按小时计费(是/否) */
    @ApiModelProperty("分时段按小时计费(是/否)")
    @Excel(name = "分时段按小时计费(是/否)")
    private Integer timeSlotHourly;

    /** 分时段小时计费规则 */
    @ApiModelProperty("分时段小时计费规则")
    @Excel(name = "分时段小时计费规则")
    private String timeSlotHourlyDetails;

    /** 分时段按包段计费(是/否) */
    @ApiModelProperty("分时段按包段计费(是/否)")
    @Excel(name = "分时段按包段计费(是/否)")
    private Integer timeSlotSegment;

    /** 分时段包段计费规则 */
    @ApiModelProperty("分时段包段计费规则")
    @Excel(name = "分时段包段计费规则")
    private String timeSlotSegmentDetails;

    /** 分时段按分钟计费(是/否) */
    @ApiModelProperty("分时段按分钟计费(是/否)")
    @Excel(name = "分时段按分钟计费(是/否)")
    private Integer timeSlotMinute;

    /** 分时段分钟计费规则 */
    @ApiModelProperty("分时段分钟计费规则")
    @Excel(name = "分时段分钟计费规则")
    private String timeSlotMinuteDetails;

    /** 跨时段计费方式 */
    @ApiModelProperty("跨时段计费方式")
    @Excel(name = "跨时段计费方式")
    private String crossTimeSlotMethod;

    /** 整单折扣，表示整单可以享受的折扣比例 */
    @ApiModelProperty("整单折扣")
    @Excel(name = "整单折扣")
    private BigDecimal fullOrderDiscount;

    /** 折扣方式，例如：满减、折扣等 */
    @ApiModelProperty("折扣方式")
    @Excel(name = "折扣方式")
    private String discountMethod;

    /** 整单折扣后继续参与会员折扣*/
    @ApiModelProperty("整单折扣后继续参与会员折扣")
    @Excel(name = "整单折扣后继续参与会员折扣")
    private Integer continueDiscountAfterFullOrder;

    /** 参与最低消费 */
    @ApiModelProperty("参与最低消费")
    @Excel(name = "参与最低消费")
    private Integer participateInMinimumConsumption;

    /** 参与会员积分 */
    @ApiModelProperty("参与会员积分")
    @Excel(name = "参与会员积分")
    private Integer participateInMemberPoints;

    /** 扫码开单 表示是否支持扫码开单 */
    @ApiModelProperty("扫码开单")
    @Excel(name = "扫码开单")
    private Integer scanToOpen;

    /** 支持积分抵现 */
    @ApiModelProperty("支持积分抵现")
    @Excel(name = "支持积分抵现")
    private Integer supportPointsCashout;

    /** 开单优惠，描述开单时可以享受的优惠 */
    @ApiModelProperty("开单优惠，描述开单时可以享受的优惠")
    @Excel(name = "开单优惠，描述开单时可以享受的优惠")
    private String openingDiscount;

    /** 超出时段，描述超出某个时间段后的计费规则 */
    @ApiModelProperty("超出时段，描述超出某个时间段后的计费规则")
    @Excel(name = "超出时段，描述超出某个时间段后的计费规则")
    private String overTimePeriod;

    /** 手机号（新增字段） */
    @ApiModelProperty("手机号")
    @Excel(name = "手机号", readConverterExp = "新=增字段")
    private String phone;

    public void setId(Long id)
    {
        this.id = id;
    }

    public Long getId()
    {
        return id;
    }

    public void setBillingType(String billingType)
    {
        this.billingType = billingType;
    }

    public String getBillingType()
    {
        return billingType;
    }

    public void setBillingMethodName(String billingMethodName)
    {
        this.billingMethodName = billingMethodName;
    }

    public String getBillingMethodName()
    {
        return billingMethodName;
    }

    public void setCode(String code)
    {
        this.code = code;
    }

    public String getCode()
    {
        return code;
    }

    public void setBillingMethod(String billingMethod)
    {
        this.billingMethod = billingMethod;
    }

    public String getBillingMethod()
    {
        return billingMethod;
    }

    public void setActivity(String activity)
    {
        this.activity = activity;
    }

    public String getActivity()
    {
        return activity;
    }

    public void setSortOrder(Long sortOrder)
    {
        this.sortOrder = sortOrder;
    }

    public Long getSortOrder()
    {
        return sortOrder;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public String getStatus()
    {
        return status;
    }

    public void setAfterOpening(Integer afterOpening)
    {
        this.afterOpening = afterOpening;
    }

    public Integer getAfterOpening()
    {
        return afterOpening;
    }

    public void setPerHour(BigDecimal perHour)
    {
        this.perHour = perHour;
    }

    public BigDecimal getPerHour()
    {
        return perHour;
    }

    public void setOverOneHourBillingMethod(String overOneHourBillingMethod)
    {
        this.overOneHourBillingMethod = overOneHourBillingMethod;
    }

    public String getOverOneHourBillingMethod()
    {
        return overOneHourBillingMethod;
    }

    public void setSegmentBilling(Integer segmentBilling)
    {
        this.segmentBilling = segmentBilling;
    }

    public Integer getSegmentBilling()
    {
        return segmentBilling;
    }

    public void setSegmentBillingDetails(String segmentBillingDetails)
    {
        this.segmentBillingDetails = segmentBillingDetails;
    }

    public String getSegmentBillingDetails()
    {
        return segmentBillingDetails;
    }

    public void setOverFourHoursMethod(String overFourHoursMethod)
    {
        this.overFourHoursMethod = overFourHoursMethod;
    }

    public String getOverFourHoursMethod()
    {
        return overFourHoursMethod;
    }

    public void setVenueBilling(Integer venueBilling)
    {
        this.venueBilling = venueBilling;
    }

    public Integer getVenueBilling()
    {
        return venueBilling;
    }

    public void setVenueBillingDetails(String venueBillingDetails)
    {
        this.venueBillingDetails = venueBillingDetails;
    }

    public String getVenueBillingDetails()
    {
        return venueBillingDetails;
    }

    public void setCrossVenueMethod(String crossVenueMethod)
    {
        this.crossVenueMethod = crossVenueMethod;
    }

    public String getCrossVenueMethod()
    {
        return crossVenueMethod;
    }

    public void setTimeSlotHourly(Integer timeSlotHourly)
    {
        this.timeSlotHourly = timeSlotHourly;
    }

    public Integer getTimeSlotHourly()
    {
        return timeSlotHourly;
    }

    public void setTimeSlotHourlyDetails(String timeSlotHourlyDetails)
    {
        this.timeSlotHourlyDetails = timeSlotHourlyDetails;
    }

    public String getTimeSlotHourlyDetails()
    {
        return timeSlotHourlyDetails;
    }

    public void setTimeSlotSegment(Integer timeSlotSegment)
    {
        this.timeSlotSegment = timeSlotSegment;
    }

    public Integer getTimeSlotSegment()
    {
        return timeSlotSegment;
    }

    public void setTimeSlotSegmentDetails(String timeSlotSegmentDetails)
    {
        this.timeSlotSegmentDetails = timeSlotSegmentDetails;
    }

    public String getTimeSlotSegmentDetails()
    {
        return timeSlotSegmentDetails;
    }

    public void setTimeSlotMinute(Integer timeSlotMinute)
    {
        this.timeSlotMinute = timeSlotMinute;
    }

    public Integer getTimeSlotMinute()
    {
        return timeSlotMinute;
    }

    public void setTimeSlotMinuteDetails(String timeSlotMinuteDetails)
    {
        this.timeSlotMinuteDetails = timeSlotMinuteDetails;
    }

    public String getTimeSlotMinuteDetails()
    {
        return timeSlotMinuteDetails;
    }

    public void setCrossTimeSlotMethod(String crossTimeSlotMethod)
    {
        this.crossTimeSlotMethod = crossTimeSlotMethod;
    }

    public String getCrossTimeSlotMethod()
    {
        return crossTimeSlotMethod;
    }

    public void setFullOrderDiscount(BigDecimal fullOrderDiscount)
    {
        this.fullOrderDiscount = fullOrderDiscount;
    }

    public BigDecimal getFullOrderDiscount()
    {
        return fullOrderDiscount;
    }

    public void setDiscountMethod(String discountMethod)
    {
        this.discountMethod = discountMethod;
    }

    public String getDiscountMethod()
    {
        return discountMethod;
    }

    public void setContinueDiscountAfterFullOrder(Integer continueDiscountAfterFullOrder)
    {
        this.continueDiscountAfterFullOrder = continueDiscountAfterFullOrder;
    }

    public Integer getContinueDiscountAfterFullOrder()
    {
        return continueDiscountAfterFullOrder;
    }

    public void setParticipateInMinimumConsumption(Integer participateInMinimumConsumption)
    {
        this.participateInMinimumConsumption = participateInMinimumConsumption;
    }

    public Integer getParticipateInMinimumConsumption()
    {
        return participateInMinimumConsumption;
    }

    public void setParticipateInMemberPoints(Integer participateInMemberPoints)
    {
        this.participateInMemberPoints = participateInMemberPoints;
    }

    public Integer getParticipateInMemberPoints()
    {
        return participateInMemberPoints;
    }

    public void setScanToOpen(Integer scanToOpen)
    {
        this.scanToOpen = scanToOpen;
    }

    public Integer getScanToOpen()
    {
        return scanToOpen;
    }

    public void setSupportPointsCashout(Integer supportPointsCashout)
    {
        this.supportPointsCashout = supportPointsCashout;
    }

    public Integer getSupportPointsCashout()
    {
        return supportPointsCashout;
    }

    public void setOpeningDiscount(String openingDiscount)
    {
        this.openingDiscount = openingDiscount;
    }

    public String getOpeningDiscount()
    {
        return openingDiscount;
    }

    public void setOverTimePeriod(String overTimePeriod)
    {
        this.overTimePeriod = overTimePeriod;
    }

    public String getOverTimePeriod()
    {
        return overTimePeriod;
    }

    public void setPhone(String phone)
    {
        this.phone = phone;
    }

    public String getPhone()
    {
        return phone;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("billingType", getBillingType())
                .append("billingMethodName", getBillingMethodName())
                .append("code", getCode())
                .append("billingMethod", getBillingMethod())
                .append("activity", getActivity())
                .append("sortOrder", getSortOrder())
                .append("status", getStatus())
                .append("afterOpening", getAfterOpening())
                .append("perHour", getPerHour())
                .append("overOneHourBillingMethod", getOverOneHourBillingMethod())
                .append("segmentBilling", getSegmentBilling())
                .append("segmentBillingDetails", getSegmentBillingDetails())
                .append("overFourHoursMethod", getOverFourHoursMethod())
                .append("venueBilling", getVenueBilling())
                .append("venueBillingDetails", getVenueBillingDetails())
                .append("crossVenueMethod", getCrossVenueMethod())
                .append("timeSlotHourly", getTimeSlotHourly())
                .append("timeSlotHourlyDetails", getTimeSlotHourlyDetails())
                .append("timeSlotSegment", getTimeSlotSegment())
                .append("timeSlotSegmentDetails", getTimeSlotSegmentDetails())
                .append("timeSlotMinute", getTimeSlotMinute())
                .append("timeSlotMinuteDetails", getTimeSlotMinuteDetails())
                .append("crossTimeSlotMethod", getCrossTimeSlotMethod())
                .append("fullOrderDiscount", getFullOrderDiscount())
                .append("discountMethod", getDiscountMethod())
                .append("continueDiscountAfterFullOrder", getContinueDiscountAfterFullOrder())
                .append("participateInMinimumConsumption", getParticipateInMinimumConsumption())
                .append("participateInMemberPoints", getParticipateInMemberPoints())
                .append("scanToOpen", getScanToOpen())
                .append("supportPointsCashout", getSupportPointsCashout())
                .append("openingDiscount", getOpeningDiscount())
                .append("overTimePeriod", getOverTimePeriod())
                .append("phone", getPhone())
                .toString();
    }
}
